﻿using System;
using System.Linq;
using System.Collections.Generic;
using SIM.Geo.DA;
using SIM.Geo.BE;
namespace SIM.Geo.BL

{
    /// <summary>
    /// Clase de la capa de negocio que gestiona tipo de alteracion
    /// </summary>
    public class BLTipoAlteracion
    {
        #region Metodos
        /// <summary>
        /// Metodo que devuelve lista de tipo alteracion
        /// </summary>
        /// <returns></returns>
        public List<TipoAlteracion> Listar()
        {
        try
        {
            return Accesor.Listar();
        }
            catch(Exception)
        {
            throw;
        }
        }
        public int Insertar(TipoAlteracion tipoalteracion)
        {
            try
            {
                return Accesor.Insertar(tipoalteracion);
            }
            catch(Exception)
            {
                throw;
            }
        
        }
        /// <summary>
        /// metodo que modifica tipo alteracion
        /// </summary>
        /// <param name="tipoalteracion"></param>
        public void Modificar(TipoAlteracion tipoalteracion)
        {
            try
            {
                var tipoalteracionEdit = Accesor.Obtener(tipoalteracion.CodigoTipoAlteracion);
                tipoalteracionEdit.Descripcion = tipoalteracion.Descripcion;
                tipoalteracionEdit.Valor = tipoalteracion.Valor;
                Accesor.Modificar(tipoalteracionEdit);

            }
            catch(Exception)
            {
                throw;
            }
        }
        /// <summary>
        /// Metodo que elimina el tipo alteracion
        /// </summary>
        /// <param name="codigoTipoAlteracion"></param>
        public void Eliminar(int codigoTipoAlteracion)
        {
            try
            {
                var tipoalteracion = Accesor.Obtener(codigoTipoAlteracion);
                Accesor.Eliminar(tipoalteracion);
            }
            catch(Exception)
            {
                throw;
            }
        }
        /// <summary>
        /// Metodo que busca por nombre de tipo alteracion
        /// </summary>
        /// <param name="nombre"></param>
        /// <returns></returns>
        public List<TipoAlteracion> Buscar(string nombre)
        {
            try
            {
                return Accesor.Buscar(nombre);
            }
            catch(Exception)
            {
                throw;
            }
        }
        /// <summary>
        /// Metodo que devuelve un tipo alteracion por codigo
        /// </summary>
        /// <param name="codigoTipoAlteracion"></param>
        /// <returns></returns>
        public TipoAlteracion Obtener(int codigoTipoAlteracion)
        {
            try
            {
                return Accesor.Obtener(codigoTipoAlteracion);
            }
            catch(Exception)
            {
                throw;
            }
        }

        /// <summary>
        /// Devuelve la lista para ComboBox, DropdownList, devuelve campos Value y Text
        /// </summary>
        /// <returns></returns>
        public List<ListItemInt> ObtenerListItem()
        {

            var result = Accesor.Listar();
            return result
                .Select(x => new ListItemInt { Value = x.CodigoTipoAlteracion, Text = x.Descripcion }).OrderBy(x => x.Text).ToList();

        }

        #endregion
        #region Accesor
        private static DATipoAlteracion Accesor
        {
            [System.Diagnostics.DebuggerStepThrough]
            get { return new DATipoAlteracion(); }
        }
        #endregion

    }
}
